package com.digicom.service.article;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.digicom.common.entity.Article;

import java.util.List;

/**
 * 稿件服务接口
 */
public interface ArticleService extends IService<Article> {
    /**
     * 查询稿件列表（分页）
     *
     * @param article 稿件查询条件
     * @param page 分页对象
     * @return 分页结果
     */
    Page<Article> listArticlePage(Article article, Page<Article> page);

    /**
     * 根据专题ID查询稿件列表
     *
     * @param topicId 专题ID
     * @return 稿件列表
     */
    List<Article> listArticlesByTopicId(Long topicId);

    /**
     * 保存稿件（新增或修改）
     *
     * @param article 稿件信息
     * @return 稿件ID
     */
    Long saveArticle(Article article);

    /**
     * 发布稿件
     *
     * @param articleId 稿件ID
     * @return 结果
     */
    boolean publishArticle(Long articleId);

    /**
     * 将稿件同步到APP
     *
     * @param articleId 稿件ID
     * @return 结果
     */
    boolean syncArticleToApp(Long articleId);

    /**
     * 获取稿件详情
     *
     * @param articleId 稿件ID
     * @return 稿件详情
     */
    Article getArticleDetail(Long articleId);

    /**
     * 批量删除稿件
     *
     * @param articleIds 稿件ID数组
     * @return 结果
     */
    boolean deleteArticles(Long[] articleIds);

    /**
     * 更新稿件浏览量
     *
     * @param articleId 稿件ID
     * @return 结果
     */
    boolean updateViewCount(Long articleId);

    /**
     * 检查用户是否已购买付费稿件
     *
     * @param userId 用户ID
     * @param articleId 稿件ID
     * @return 是否已购买
     */
    boolean checkUserPurchased(Long userId, Long articleId);

    /**
     * 获取热门稿件列表
     *
     * @param limit 数量限制
     * @return 热门稿件列表
     */
    List<Article> getHotArticles(int limit);

    /**
     * 更新文章点赞数
     * @param articleId 文章ID
     * @param delta 增量值
     * @return 操作结果
     */
    boolean updateLikeCount(Long articleId, int delta);

    /**
     * 更新文章收藏数
     * @param articleId 文章ID
     * @param delta 增量值
     * @return 操作结果
     */
    boolean updateCollectCount(Long articleId, int delta);

    /**
     * 更新文章分享数
     * @param articleId 文章ID
     * @param delta 增量值
     * @return 操作结果
     */
    boolean updateShareCount(Long articleId, int delta);
}